package xyz.zcq.zcqrpc.proxy;

import xyz.zcq.zcqrpc.RpcApplication;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Proxy;

/**
 * 服务代理工厂（用于生产代理对象）
 */
public class ServiceProxyFactory {

    /**
     * 根据服务类对象创建代理对象
     *
     * @param clazz 接口类对象
     * @param <T>   接口类型
     * @return 代理对象
     */
    public static <T> T getProxy(Class<T> clazz) {
        InvocationHandler ih;
        if (RpcApplication.getRpcConfig().isUserMock()) {
            ih = new MockServiceProxy();
        } else {
            ih = new ServiceProxy();
        }
        return (T) Proxy.newProxyInstance(clazz.getClassLoader(), new Class[]{clazz}, ih);
    }

}
